package com.lw.entity.table;

import com.mybatisflex.core.query.QueryColumn;
import com.mybatisflex.core.table.TableDef;


/**
 * 菜单管理 表定义层。
 *
 * @author lw
 * @since 2025年05月16日 23:03:42
 */
public class TbMenuTableDef extends TableDef {

    private static final long serialVersionUID = 1L;

    /**
     * 菜单管理
     */
    public static final TbMenuTableDef TB_MENU = new TbMenuTableDef();

    /**
     * ID
     */
    public final QueryColumn ID = new QueryColumn(this, "id");

    /**
     * 菜单图标
     */
    public final QueryColumn ICON = new QueryColumn(this, "icon");

    /**
     * 菜单名称
     */
    public final QueryColumn NAME = new QueryColumn(this, "name");

    /**
     * 【按钮】权限标识
     */
    public final QueryColumn PERM = new QueryColumn(this, "perm");

    /**
     * 排序
     */
    public final QueryColumn SORT = new QueryColumn(this, "sort");

    /**
     * 菜单类型（1-菜单 2-目录 3-外链 4-按钮）
     */
    public final QueryColumn TYPE = new QueryColumn(this, "type");

    /**
     * 路由参数
     */
    public final QueryColumn PARAMS = new QueryColumn(this, "params");

    /**
     * 显示状态（1-显示 0-隐藏）
     */
    public final QueryColumn VISIBLE = new QueryColumn(this, "visible");

    /**
     * 父菜单ID
     */
    public final QueryColumn PARENT_ID = new QueryColumn(this, "parent_id");

    /**
     * 跳转路径
     */
    public final QueryColumn REDIRECT = new QueryColumn(this, "redirect");

    /**
     * 父节点ID路径
     */
    public final QueryColumn TREE_PATH = new QueryColumn(this, "tree_path");

    /**
     * 组件路径（组件页面完整路径，相对于 src/views/，缺省后缀 .vue）
     */
    public final QueryColumn COMPONENT = new QueryColumn(this, "component");

    /**
     * 【菜单】是否开启页面缓存（1-是 0-否）
     */
    public final QueryColumn KEEP_ALIVE = new QueryColumn(this, "keep_alive");

    /**
     * 路由名称（Vue Router 中用于命名路由）
     */
    public final QueryColumn ROUTE_NAME = new QueryColumn(this, "route_name");

    /**
     * 路由路径（Vue Router 中定义的 URL 路径）
     */
    public final QueryColumn ROUTE_PATH = new QueryColumn(this, "route_path");

    /**
     * 【目录】只有一个子路由是否始终显示（1-是 0-否）
     */
    public final QueryColumn ALWAYS_SHOW = new QueryColumn(this, "always_show");

    /**
     * 创建时间
     */
    public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");

    /**
     * 更新时间
     */
    public final QueryColumn UPDATE_TIME = new QueryColumn(this, "update_time");

    /**
     * 所有字段。
     */
    public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*");

    /**
     * 默认字段，不包含逻辑删除或者 large 等字段。
     */
    public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, PARENT_ID, TREE_PATH, NAME, TYPE, ROUTE_NAME, ROUTE_PATH, COMPONENT, PERM, ALWAYS_SHOW, KEEP_ALIVE, VISIBLE, SORT, ICON, REDIRECT, CREATE_TIME, UPDATE_TIME, PARAMS};

    public TbMenuTableDef() {
        super("", "tb_menu");
    }

    private TbMenuTableDef(String schema, String name, String alisa) {
        super(schema, name, alisa);
    }

    public TbMenuTableDef as(String alias) {
        String key = getNameWithSchema() + "." + alias;
        return getCache(key, k -> new TbMenuTableDef("", "tb_menu", alias));
    }

}
